package com.yexiao.core.util;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author lkl
 * @since 2025/3/12
 */
public class IDateUtil {

    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    private static final DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 获取当前时间
     */
    public static String now() {
        return DateUtil.now();
    }

    public static Date nowDate() {
        return DateUtil.date();
    }

    public static long nowSecond() {
        return DateUtil.current();
    }

    /**
     * 时间格式转换
     */
    public static String format(Date date) {
        return DateUtil.format(date, DEFAULT_DATE_FORMAT);
    }

    public static String format(Date date, String format) {
        return DateUtil.format(date, format);
    }

    public static String format(String date) {
        return format(DateUtil.parse(date));
    }

    public static String format(String date, String format) {
        DateTime parseDate = DateUtil.parse(date, format);
        return parseDate.toDateStr();
    }

    public static Date parseDate(String date) {
        return DateUtil.parse(date);
    }

    public static Date parseDate(long timestamp) {
        return DateUtil.date();
    }

    public static String parseStr(long timestamp) {
        return format(parseDate(timestamp));
    }


    public static String yyyyMM(String dateStr) {
        // 解析字符串为 LocalDateTime 对象
        LocalDateTime dateTime = LocalDateTime.parse(dateStr, inputFormatter);
        // 转换为 LocalDate 对象（仅日期部分）
        java.time.LocalDate date = dateTime.toLocalDate();
        // 定义输出格式的格式化器
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyyMM");
        // 格式化为目标字符串
        return date.format(outputFormatter);
    }

    public static String yyyyMMdd(String dateStr) {
        // 解析字符串为 LocalDateTime 对象
        LocalDateTime dateTime = LocalDateTime.parse(dateStr, inputFormatter);
        // 转换为 LocalDate 对象（仅日期部分）
        java.time.LocalDate date = dateTime.toLocalDate();
        // 定义输出格式的格式化器
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyyMM");
        // 格式化为目标字符串
        return date.format(outputFormatter);
    }

    public static String format(LocalDateTime localDateTime, String format) {
        if (localDateTime == null) {
            localDateTime = LocalDateTime.now();
        }

        DateTimeFormatter dateTimeFormatter;
        if (StrUtil.isEmpty(format)) {
            dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        } else {
            dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        }

        return localDateTime.format(dateTimeFormatter);
    }
}
